package com.xsy.middleware.controller;

import com.xsy.middleware.schedule.SyncCrmData;
import com.xsy.middleware.utils.CrmApiUtils;
import com.xsy.middleware.utils.ResultVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description: TODO
 * @Author: 黎炎松
 * @Date: 2024/4/23 07:44
 */
@Slf4j
@RestController
public class SyncCrmController {

    @Autowired
    private InitCrmSyncTable initCrmSyncTable;

    @Autowired
    private SyncCrmTableData syncCrmTableData;

    @Autowired
    private SyncCrmTableFile syncCrmTableFile;

    @Autowired
    private InitCrmBaseTable initCrmBaseTable;

    @Autowired
    private SyncCrmData syncCrmData;

    @Autowired
    private CrmApiUtils crmApiUtils;

    /**
     * 根据 excel 批量生成 crm 配置表
     * @return
     */
    @GetMapping("/batchInitCrmBaseTable")
    public ResultVo batchInitCrmBaseTable() {
        return initCrmBaseTable.batchInitCrmBaseTable();
    }

    /**
     * 批量同步本地数据库 (服务器首次初始化)
     * @return
     */
    @GetMapping("/batchInitTable")
    public ResultVo batchInitTable() {
        return initCrmSyncTable.batchInitCrmSyncTable();
    }


    /**
     * 新增、重置配置表且初始化本地数据库
     * @param tableName
     * @return
     */
    @GetMapping("/initCrmBaseTable")
    public ResultVo createCrmBaseTable(
            @RequestParam(required = true) String tableName,
            @RequestParam(required = false, defaultValue = "1") Integer isSyncTableData) {

        // 创建CRM配置表数据
        ResultVo resultVo = initCrmBaseTable.createCrmBaseTable(tableName);
        // 本地建表且同步数据、文件
        if (isSyncTableData == 1) {
            resultVo = initCrmSyncTable.createTable(tableName, isSyncTableData);
        }
        return resultVo;
    }

    /**
     * 单张表创建本地数据库且同步文件 （前提：crm 已有当前配置表 如没有则调用上面 initCrmBaseTable 方法）
     * @param tableName
     * @param isSyncTableData
     * @return
     */
    @GetMapping("/initTable")
    public ResultVo createTable(
            @RequestParam(required = true) String tableName,
            @RequestParam(required = false, defaultValue = "1") Integer isSyncTableData) {
        return initCrmSyncTable.createTable(tableName, isSyncTableData);
    }

    /**
     * 手动调用-更新单张表数据库数据  （系统中已有定时器进行自动更新）
     * @param tableName
     * @return
     */
    @GetMapping("/updateTable")
    public ResultVo updateTable(@RequestParam(required = true) String tableName) {

        // 更新表数据
        ResultVo resultVo = syncCrmTableData.syncCrmTableData(tableName);
        if (resultVo.getCode() != 200) {
            return resultVo;
        }

        // 更新文件
        ResultVo fileResultVo = syncCrmTableFile.syncCrmTableFile(tableName, 1);
        if (fileResultVo.getCode() != 200) {
            return fileResultVo;
        }

        return ResultVo.success("数据、文件修改成功 ===========> " + tableName);
    }

    /**
     * 手动触发测试定时器
     */
    @GetMapping("/testScheduler")
    public String testScheduler() {
        syncCrmData.syncCrmData();
        return "同步执行完成";
    }

    /**
     * 清空token过期
     */
    @GetMapping("/clearToken")
    public String clearToken() {
        return crmApiUtils.clearToken();
    }

}
